---
displayed_sidebar: "Chinese"
---

# json_length

## 功能

返回 JSON 字符串的长度。如果指定了 `path`，则返回 `path` 指定的值的长度。

该函数按照如下规则计算 JSON 字符串的长度：

- 单值的长度为 1。比如`1`，`"a"`，`true`，`false`，`null` 的长度都为 1。

- 数组 (array) 的长度为数组内元素的数量。 比如`[1, 2]` 的长度为 2。

- 对象 (object) 的长度为对象内成员 (key) 的数量。 比如 `{"a": 1}` 的长度为 1。

- 内嵌的数组或对象不参与长度计算。 比如 `{"a": [1, 2]}` 的长度为 1，因为会计算外层 JSON 对象的长度，不计算内嵌数组`[1, 2]` 的长度。

## 语法

```SQL
json_length(json_doc[, path])
```

## 参数说明

- `json_doc`： JSON 字符串，必选。

- `path`：路径表达式，可选。取值类型为 VARCHAR。`path` 一般以 `$` 符号作为开头；使用 `.` 作为路径分隔符；使用 `[]` 表示数组下标，从 0 开始。

## 返回值说明

返回 INT 类型的值。

如果`json_doc`指定的 JSON 字符串为无效字符串，则返回报错。

存在如下情况，返回 0：

- JSON 字符串中不存在`path`指定的路径。
- `path`指定的路径不是有效的路径表达式。
- `path` 中包含 `*` 或 `**`通配符。

## 示例

示例一: 返回单值的长度。

```Plain
select json_length('1');
+------------------+
| json_length('1') |
+------------------+
|                1 |
+------------------+
```

示例二: 返回空对象的长度。

```Plain
select json_length('{}');
+-------------------+
| json_length('{}') |
+-------------------+
|                 0 |
+-------------------+
```

示例三: 返回 JSON 对象长度。

```Plain
select json_length('{"Name": "Alice"}');
+----------------------------------+
| json_length('{"Name": "Alice"}') |
+----------------------------------+
|                                1 |
+----------------------------------+
```

示例四: 返回 JSON 数组的长度。

```plain text
select json_length('[1, 2, 3]');
+--------------------------+
| json_length('[1, 2, 3]') |
+--------------------------+
|                        3 |
+--------------------------+
```

示例五: 数组元素内嵌了数组 [3, 4]，内嵌的数组不计入长度，所以长度仍为 3。

```plain text
select json_length('[1, 2, [3, 4]]');
+-------------------------------+
| json_length('[1, 2, [3, 4]]') |
+-------------------------------+
|                             3 |
+-------------------------------+
```

示例六: 返回 JSON 字符串中路径表达式指定值的长度。

```SQL
SET @file = '{  
    "Employee": {    
       "Name": "Alice", 
       "Age": 32,
       "Hobbies": ["Dancing", "Shopping"]  
    }
 }';
 
select json_length(@file, '$.Employee');
+----------------------------------+
| json_length(@file, '$.Employee') |
+----------------------------------+
|                                3 |
+----------------------------------+
```

示例七：返回路径表达式指定的值的长度。

```plain text
select json_length('{"x": 1, "y": [1, 2]}', '$.y');
+---------------------------------------------+
| json_length('{"x": 1, "y": [1, 2]}', '$.y') |
+---------------------------------------------+
|                                           2 |
+---------------------------------------------+
```
